/*
* 
* Fichier source projet intel Acceler8 sous license GNU GPL v3.
* Voir http://www.gnu.org/copyleft/gpl.html pour plus d'informations
* La license est egalement disponible dans le repertoire /doc
* 
* Cree le : mardi 08 novembre 2011 à 22 : 13.
* Auteurs : Axel MOINET et Arnaud DURAND.
* 
* Nom de fichier : filtreconverttoint.cpp
* Chemin du fichier : ./src/classes/filtreconverttoint/filtreconverttoint.cpp
* 
* Description : Classe d'implementation de la conversion de la chaine en int.
* 			Filtre du pipeline de lecture de fichier.
* 
*/

#include "filtreconverttoint.h"

filtreConvertToInt::filtreConvertToInt() : tbb::filter(serial_in_order) {

}

filtreConvertToInt::filtreConvertToInt(threadPrincipal *p_threadPrincipal) : tbb::filter(serial_in_order){
	if(p_threadPrincipal == NULL) {

	}
	else {
		this->thread = p_threadPrincipal;
	}
}

void* filtreConvertToInt::operator ()(void *item) {
	if(item == NULL)
		return NULL;
	else{
		int i;
		int y = 0;
		struct lineReader *values = static_cast<struct lineReader*>(item);
		if(values->ligneLue == NULL) {
			return NULL;
			//Mettre le flag de fin de lecture de fichier à 1
		}
		std::istringstream fluxChaine(*(values->ligneLue));
		this->ligneInt = new tbb::concurrent_vector<int>();
		this->ligneZero = new tbb::concurrent_vector<int>();
		int indexAdd = values->nbligne - 1;
		int index = indexAdd + 1;

		while (fluxChaine >> i) {
			if(values->nbligne == 1) {
				ligneInt->push_back(i);
				ligneZero->push_back(0);
			}
			else
				ligneInt->push_back(i + (*(this->thread->getPrefixeTab()))[indexAdd].at(y) );
			y++;
		}

		if(values->nbligne == 1) {
			(*(this->thread->getPrefixeTab())).push_back(*ligneZero);
			//(*(this->thread->getStructureResult())).S = (*(this->ligneInt))[0];
		}

		(*(this->thread->getPrefixeTab())).push_back(*ligneInt);

		delete values;
		delete ligneInt;
		delete ligneZero;
		return NULL;
	}
}
